gl renderer: Don't crash if the first op is an opacity one
authorTimm Bäder <mail@baedert.org>
Tue, 19 Dec 2017 15:00:43 +0000 (16:00 +0100)
committerTimm Bäder <mail@baedert.org>
Thu, 21 Dec 2017 18:12:32 +0000 (19:12 +0100)
gsk/gl/gskglrenderops.c

index 7b9a6a2cb2391d78e14a38756dc4339e7a7a7ea8..9e2f719e2daf3fb904b1505c749baf141bc218b5 100644 (file)
@@ -236,11 +236,20 @@ ops_set_opacity (RenderOpBuilder *builder,
   if (builder->current_opacity == opacity)
     return opacity;
 
-  last_op = &g_array_index (builder->render_ops, RenderOp, builder->render_ops->len - 1);
-
-  if (last_op->op == OP_CHANGE_OPACITY)
+  if (builder->render_ops->len > 0)
     {
-      last_op->opacity = opacity;
+      last_op = &g_array_index (builder->render_ops, RenderOp, builder->render_ops->len - 1);
+
+      if (last_op->op == OP_CHANGE_OPACITY)
+        {
+          last_op->opacity = opacity;
+        }
+      else
+        {
+          op.op = OP_CHANGE_OPACITY;
+          op.opacity = opacity;
+          g_array_append_val (builder->render_ops, op);
+        }
     }
   else
     {